#Boa:Frame:Frame1

import wx
import wx.grid
import utiles
import consultasBD
from decimal import Decimal
import Dialog2
import os

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)
GRIS = ( 220, 220, 220, 255)
NEGRO = ( 0, 0, 0, 255)
VERDENEGRO = ( 47, 79, 79, 255)

def create(parent):
    return Frame1(parent)

[wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1BUTTON2, wxID_FRAME1BUTTON3, 
 wxID_FRAME1BUTTON4, wxID_FRAME1BUTTON5, wxID_FRAME1CHECKBOX2, 
 wxID_FRAME1COMBOBOX1, wxID_FRAME1COMBOBOX2, wxID_FRAME1DATEPICKERCTRL1, 
 wxID_FRAME1GRID1, wxID_FRAME1PANEL1, wxID_FRAME1STATICTEXT1, 
 wxID_FRAME1STATICTEXT10, wxID_FRAME1STATICTEXT2, wxID_FRAME1STATICTEXT3, 
 wxID_FRAME1STATICTEXT4, wxID_FRAME1STATICTEXT5, wxID_FRAME1STATICTEXT6, 
 wxID_FRAME1STATICTEXT7, wxID_FRAME1STATICTEXT8, wxID_FRAME1STATICTEXT9, 
] = [wx.NewId() for _init_ctrls in range(22)]

class Frame1(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(16, 21), size=wx.Size(1207, 587),
              style=wx.DEFAULT_FRAME_STYLE,
              title='Recargos / Descuentos Masivos')
        self.SetClientSize(wx.Size(1199, 560))

        self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
              pos=wx.Point(0, 0), size=wx.Size(1199, 560),
              style=wx.TAB_TRAVERSAL)

        self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
              label='Fecha', name='staticText1', parent=self.panel1,
              pos=wx.Point(16, 8), size=wx.Size(29, 13), style=0)

        self.datePickerCtrl1 = wx.DatePickerCtrl(id=wxID_FRAME1DATEPICKERCTRL1,
              name='datePickerCtrl1', parent=self.panel1, pos=wx.Point(16, 24),
              size=wx.Size(80, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)
        self.datePickerCtrl1.Bind(wx.EVT_DATE_CHANGED, self.OnCambiarFecha,
              id=wxID_FRAME1DATEPICKERCTRL1)

        self.staticText2 = wx.StaticText(id=wxID_FRAME1STATICTEXT2,
              label='Sucursal', name='staticText2', parent=self.panel1,
              pos=wx.Point(104, 8), size=wx.Size(40, 13), style=0)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_FRAME1COMBOBOX1,
              name='comboBox1', parent=self.panel1, pos=wx.Point(104, 24),
              size=wx.Size(176, 21), style=0, value='')
        self.comboBox1.SetLabel('')

        self.checkBox2 = wx.CheckBox(id=wxID_FRAME1CHECKBOX2,
              label='Incluye SALDO ACTUAL', name='checkBox2',
              parent=self.panel1, pos=wx.Point(104, 48), size=wx.Size(136, 13),
              style=0)
        self.checkBox2.SetValue(True)
        self.checkBox2.Show(False)

        self.comboBox2 = wx.ComboBox(choices=[], id=wxID_FRAME1COMBOBOX2,
              name='comboBox2', parent=self.panel1, pos=wx.Point(288, 24),
              size=wx.Size(130, 21), style=0, value='')
        self.comboBox2.SetLabel('')

        self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, label='Aceptar',
              name='button1', parent=self.panel1, pos=wx.Point(424, 24),
              size=wx.Size(64, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBotonAceptar,
              id=wxID_FRAME1BUTTON1)

        self.button2 = wx.Button(id=wxID_FRAME1BUTTON2, label='Salir',
              name='button2', parent=self.panel1, pos=wx.Point(1112, 24),
              size=wx.Size(80, 24), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_FRAME1BUTTON2)

        self.grid1 = wx.grid.Grid(id=wxID_FRAME1GRID1, name='grid1',
              parent=self.panel1, pos=wx.Point(16, 56), size=wx.Size(1176, 496),
              style=0)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_CHANGE,
              self.OnGrid1GridCellChange)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK,
              self.OnGrid1DobleClick)

        self.staticText3 = wx.StaticText(id=wxID_FRAME1STATICTEXT3,
              label='Identifiquese', name='staticText3', parent=self.panel1,
              pos=wx.Point(288, 8), size=wx.Size(63, 13), style=0)

        self.staticText4 = wx.StaticText(id=wxID_FRAME1STATICTEXT4,
              label='Observaciones', name='staticText4', parent=self.panel1,
              pos=wx.Point(784, 2), size=wx.Size(83, 13), style=0)
        self.staticText4.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.staticText5 = wx.StaticText(id=wxID_FRAME1STATICTEXT5,
              label='m - recargo por mora', name='staticText5',
              parent=self.panel1, pos=wx.Point(784, 17), size=wx.Size(101, 13),
              style=0)

        self.staticText6 = wx.StaticText(id=wxID_FRAME1STATICTEXT6,
              label='r - recargo', name='staticText6', parent=self.panel1,
              pos=wx.Point(784, 32), size=wx.Size(51, 13), style=0)

        self.staticText7 = wx.StaticText(id=wxID_FRAME1STATICTEXT7,
              label='d - descuento', name='staticText7', parent=self.panel1,
              pos=wx.Point(904, 17), size=wx.Size(66, 13), style=0)

        self.button3 = wx.Button(id=wxID_FRAME1BUTTON3, label='Limpiar',
              name='button3', parent=self.panel1, pos=wx.Point(496, 24),
              size=wx.Size(64, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnLimpiar, id=wxID_FRAME1BUTTON3)

        self.button4 = wx.Button(id=wxID_FRAME1BUTTON4, label='Ajustar',
              name='button4', parent=self.panel1, pos=wx.Point(568, 24),
              size=wx.Size(64, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnAjustar, id=wxID_FRAME1BUTTON4)

        self.staticText8 = wx.StaticText(id=wxID_FRAME1STATICTEXT8,
              label='i - impago', name='staticText8', parent=self.panel1,
              pos=wx.Point(904, 32), size=wx.Size(46, 13), style=0)

        self.staticText9 = wx.StaticText(id=wxID_FRAME1STATICTEXT9,
              label='e - error en cta. cte.', name='staticText9',
              parent=self.panel1, pos=wx.Point(992, 17), size=wx.Size(99, 13),
              style=0)

        self.staticText10 = wx.StaticText(id=wxID_FRAME1STATICTEXT10,
              label='p - poner en cero', name='staticText10',
              parent=self.panel1, pos=wx.Point(992, 32), size=wx.Size(83, 13),
              style=0)

        self.button5 = wx.Button(id=wxID_FRAME1BUTTON5, label='Borra Recargos',
              name='button5', parent=self.panel1, pos=wx.Point(680, 24),
              size=wx.Size(88, 23), style=0)
        self.button5.Bind(wx.EVT_BUTTON, self.OnBorrarRecargos,
              id=wxID_FRAME1BUTTON5)

    def __init__(self, parent):
        utiles.crearDirectorio()
        self._init_ctrls(parent)
        self.cargarSucursal()
        self.cargarVendedora()
        self.calculoDeFechas()
        self.crearGrilla()
        self.conecta = True
        self.actualizar = False
        self.verificarInterrupcion()

    def crearGrilla(self):
        #NroCliente,Nombre,Telefono,a30dias,a60dias,a90dias,aMasdias,TotalVencido
        #0          1      2        3       4       5       6        7
        #DeudaActual,Total,UltimoPago,UltimoRecargo,%,monto,NuevoTotal,observaciones
        #8           9     10        11            12 13    14         15
        columnas = ['Nro.\nCliente','Nombre','Telefono','Deuda a\n30 dias',\
                    'Deuda a\n60 dias','Deuda a\n90 dias','Deuda a\nmas dias',\
                    'Total\nVencido','Deuda\nActual','Total','Ultimo\nPago',\
                    'Ultimo\nRecargo','%'\
                    ,'monto','Nuevo\nTotal','observaciones']
        self.grid1.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)

        self.ajustarAnchoColumnas()
        #self.grid1.EnableEditing(False)
        self.grid1.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid1.Refresh()
        
    def ajustarAnchoColumnas(self):
        for y in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(y,True)

    def almacenamientoTemporal(self,fila,borrar=False):
        f=open("ClientesRecargosMasivo.txt","a")
        sucursal = self.comboBox1.GetLabel()
        usuario = self.comboBox2.GetLabel()
        #NroCliente,Nombre,Telefono,a30dias,a60dias,a90dias,aMasdias,TotalVencido
        #0          1      2        3       4       5       6        7
        #DeudaActual,Total,UltimoPago,UltimoRecargo,%,monto,NuevoTotal,observaciones
        #8           9     10        11            12 13    14         15
        encabezado = sucursal+"[;]"+usuario+"[;]"
        if not borrar:
            cadena = str(fila)+"[;]"+encabezado
            for item in xrange(self.grid1.GetNumberCols()):
                cadena+= str(self.grid1.GetCellValue(fila,item))+"[;]"
        else:
            cadena = "-1[;]"+str(fila)+"[;]"+encabezado
        cadena = cadena[:-3]+"\n"
        f.write(cadena)
        f.close()

    def verificarInterrupcion(self):
        if not os.path.isfile("ClientesRecargosMasivo.txt"):
            f=open("ClientesRecargosMasivo.txt","w")
            f.close()
            print "Almacenamiento temporal de Recargos Masivos inciado"
            return
        #existe archivo, por lo tanto un corte interrumpio la carga y se debe recuperar la informacion
        f=open("ClientesRecargosMasivo.txt","r")
        lista = f.readlines()
        f.close()
        if len(lista)==0:
            f=open("ClientesRecargosMasivo.txt","w")
            f.close()
            print "Almacenamiento temporal de Recargos Masivos inciado"
            return
        print "Restaurando ultimo recargo masivo"
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_CHANGE,None)
        self.grid1.DeleteRows()
        procesado = []
        for item in lista:
            cadena = item.split("[;]")
            if cadena[0]=="-1":
                self.grid1.DeleteRows(int(cadena[1]))
                continue
            try:
                fil = int(cadena[0])
            except:
                continue
            if not fil in procesado:
                self.grid1.AppendRows()
                procesado.append(fil)
            #NroCliente,Nombre,Telefono,a30dias,a60dias,a90dias,aMasdias,TotalVencido
            #0          1      2        3       4       5       6        7
            #DeudaActual,Total,UltimoPago,UltimoRecargo,%,monto,NuevoTotal,observaciones
            #8           9     10        11            12 13    14         15
            sucursal = cadena[1]
            usuario = cadena[2]
            self.grid1.SetCellValue(fil,0,cadena[3]) #nrocliente
            self.grid1.SetReadOnly(fil,0)
            self.grid1.SetCellValue(fil,1,cadena[4]) #nombre
            self.grid1.SetReadOnly(fil,1)
            self.grid1.SetCellValue(fil,2,cadena[5]) #telefono
            self.grid1.SetReadOnly(fil,2)
            self.grid1.SetCellValue(fil,3,cadena[6]) #a30dias
            self.grid1.SetCellAlignment(fil,3,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,3)
            self.grid1.SetCellValue(fil,4,cadena[7]) #a60dias
            self.grid1.SetCellAlignment(fil,4,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,4)
            self.grid1.SetCellValue(fil,5,cadena[8]) #a90dias
            self.grid1.SetCellAlignment(fil,5,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,5)
            self.grid1.SetCellValue(fil,6,cadena[9]) #amasdias
            self.grid1.SetCellAlignment(fil,6,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,6)
            self.grid1.SetCellValue(fil,7,cadena[10]) #totalvencido
            self.grid1.SetCellAlignment(fil,7,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,7)
            self.grid1.SetCellBackgroundColour(fil,7,GRIS)
            self.grid1.SetCellValue(fil,8,cadena[11]) #deudaactual
            self.grid1.SetCellAlignment(fil,8,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,8)
            self.grid1.SetCellValue(fil,9,cadena[12]) #total
            self.grid1.SetCellAlignment(fil,9,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,9)
            self.grid1.SetCellValue(fil,10,cadena[13]) #ultimopago
            self.grid1.SetCellAlignment(fil,10,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,10)
            self.grid1.SetCellValue(fil,11,cadena[14]) #ultimorecargo
            self.grid1.SetCellAlignment(fil,11,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,11)
            self.grid1.SetCellValue(fil,12,cadena[15]) #porcentaje
            self.grid1.SetCellAlignment(fil,12,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetCellValue(fil,13,cadena[16]) #monto
            self.grid1.SetCellAlignment(fil,13,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetCellValue(fil,14,cadena[17]) #nuevototal
            self.grid1.SetCellAlignment(fil,14,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,14)
            self.grid1.SetCellValue(fil,15,cadena[18]) #observaciones
            if self.grid1.GetCellValue(fil,2)=="PENDIENTE":
                self.grid1.SetReadOnly(fil,12)
                self.grid1.SetReadOnly(fil,13)
                self.grid1.SetReadOnly(fil,15)

        for i,item in enumerate(self.comboBox1.GetItems()):
            if sucursal == item:
                self.comboBox1.SetSelection(i)
                break
        for i,item in enumerate(self.comboBox2.GetItems()):
            if usuario == item:
                self.comboBox2.SetSelection(i)
                break
        self.comboBox1.Enable(False)
        self.comboBox2.Enable(False)
        self.button1.SetLabel("Guardar")
        self.actualizar = False

        self.ajustarAnchoColumnas()
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_CHANGE,self.OnGrid1GridCellChange)
        self.grid1.SetFocus()

    def calculoDeFechas(self):
        self.fecha1 = str(utiles.invertirFecha(self.datePickerCtrl1.GetLabel()))
        self.fecha2 = str(utiles.sumarDiasAFecha(utiles.strToDate(self.fecha1),-30))
        self.fecha3 = str(utiles.sumarDiasAFecha(utiles.strToDate(self.fecha1),-31))
        self.fecha4 = str(utiles.sumarDiasAFecha(utiles.strToDate(self.fecha1),-60))
        self.fecha5 = str(utiles.sumarDiasAFecha(utiles.strToDate(self.fecha1),-61))
        self.fecha6 = str(utiles.sumarDiasAFecha(utiles.strToDate(self.fecha1),-90))
        self.a30 = " vtas_ctasctes.vencimiento BETWEEN '"+self.fecha2+"'"+" AND "+"'"+self.fecha1+"' "
        self.a60 = " vtas_ctasctes.vencimiento BETWEEN '"+self.fecha4+"'"+" AND "+"'"+self.fecha3+"' "
        self.a90 = " vtas_ctasctes.vencimiento BETWEEN '"+self.fecha6+"'"+" AND "+"'"+self.fecha5+"' "
        self.m90 = " vtas_ctasctes.vencimiento < '"+self.fecha6+"' "
        self.actual = " vtas_ctasctes.vencimiento > '"+self.fecha1+"' "
        print "A 30 dias: "+self.fecha2+" / "+self.fecha1
        print "A 60 dias: "+self.fecha4+" / "+self.fecha3
        print "A 90 dias: "+self.fecha6+" / "+self.fecha5
        print "Mas de 90: "+self.fecha6
        print "Periodo actual: "+self.fecha1
        print

    def cargarSucursal(self):
        SQL = "SELECT nombre FROM sucursales"
        resultado = consultasBD.ordenCrudaDict(SQL)
        for item in resultado:
            self.comboBox1.Append(item["nombre"])
        sucursal = utiles.getSucursalActiva()
        self.comboBox1.SetSelection(int(sucursal)-1)
##        SQL = "SELECT nombre FROM sucursales WHERE codsucursal='%s'" % (sucursal)
##        resultado = consultasBD.ordenCrudaDict(SQL)
##        self.comboBox1.SetLabel(resultado[0]['nombre'])

    def cargarVendedora(self):
        SQL = "SELECT nombre FROM vendedoras WHERE sucursal<>0"
        resultado = consultasBD.ordenCrudaDict(SQL)
        for item in resultado:
            self.comboBox2.Append(item["nombre"])

    def OnSalir(self, event):
        self.Close()

    def OnCambiarFecha(self, event):
        self.calculoDeFechas()

    def OnBotonAceptar(self, event):
        if self.comboBox2.GetLabel()=="":
            utiles.mensaje(None,"Debe especificar quien hace los recargos")
            return
        if self.button1.GetLabel()=="Guardar":
            self.guardarRecargos()
            return
        self.button1.Enable(False)
        self.button2.Enable(False)
        self.button2.SetLabel("Procesando")
        self.button3.Enable(False)
        self.button4.Enable(False)
        self.comboBox1.Enable(False)
        self.comboBox2.Enable(False)
        self.checkBox2.Enable(False)
        #self.datePickerCtrl1.Enable(False)
        #creamos tabla provisoria para guardar resultados
        sql = "DROP TABLE IF EXISTS listadodeudas"
        consultasBD.ordenCruda(sql)
        sql = "DROP TABLE IF EXISTS listadodeudas2"
        consultasBD.ordenCruda(sql)
        print "Creando tablas auxiliares"
        r1 = "CREATE TABLE listadodeudas (`id` INT(5) NOT NULL AUTO_INCREMENT,"
        r2 = "`sucursal` INT(3) NOT NULL, "
        r3 = "`idcliente` VARCHAR(20) NOT NULL,`nombre` VARCHAR(50) NOT NULL,`telefono` VARCHAR(40) NOT NULL,"
        r4 = "`deuda30` VARCHAR(20) NOT NULL DEFAULT  '0',"
        r5 = "`deuda60` VARCHAR(20) NOT NULL DEFAULT  '0',"
        r6 = "`deuda90` VARCHAR(20) NOT NULL DEFAULT  '0',"
        r7 = "`deudama` VARCHAR(20) NOT NULL DEFAULT  '0',"
        r8 = "`actual` VARCHAR(20) NOT NULL DEFAULT  '0',"
        r9 = "`ultimo` DATE NOT NULL DEFAULT  '0000-00-00',"
        r0 = "PRIMARY KEY (`id`)) ENGINE = INNODB"
        sql = r1 + r2 + r3 + r4 + r5 + r6 + r7 + r8 + r9 + r0
        consultasBD.ordenCruda(sql)
        r1 = "CREATE TABLE listadodeudas2 (`id` INT(5) NOT NULL AUTO_INCREMENT,"
        r2 = "`sucursal` INT(3) NOT NULL, "
        r3 = "`idcliente` VARCHAR(20) NOT NULL,`nombre` VARCHAR(50) NOT NULL,`telefono` VARCHAR(40) NOT NULL DEFAULT '',"
        r4 = "`deuda30` VARCHAR(20) NOT NULL DEFAULT  '0',"
        r5 = "`deuda60` VARCHAR(20) NOT NULL DEFAULT  '0',"
        r6 = "`deuda90` VARCHAR(20) NOT NULL DEFAULT  '0',"
        r7 = "`deudama` VARCHAR(20) NOT NULL DEFAULT  '0',"
        r8 = "`actual` VARCHAR(20) NOT NULL DEFAULT  '0',"
        r9 = "`ultimo` DATE NOT NULL DEFAULT  '0000-00-00',"
        r0 = "PRIMARY KEY (`id`)) ENGINE = INNODB"
        sql = r1 + r2 + r3 + r4 + r5 + r6 + r7 + r8 + r9 + r0
        consultasBD.ordenCruda(sql)

        self.buscarDeudas()

        self.button2.SetLabel("Salir")
        self.button2.SetFocus()
        # eliminamos tablas provisorias
        print "Eliminando tablas auxiliares"
        sql = "DROP TABLE listadodeudas"
        consultasBD.ordenCruda(sql)
        sql = "DROP TABLE listadodeudas2"
        consultasBD.ordenCruda(sql)

    def existeRegistro(self,idcliente,indice):
        consultaSQL = "SELECT idcliente FROM listadodeudas WHERE idcliente='"+idcliente+"' AND sucursal='"+str(indice)+"'"
        self.resultado = consultasBD.ordenCruda(consultaSQL)
        if self.resultado == ():
            return False
        return True

##    def existeRegistro(self,indice):
##        consultaSQL = "SELECT idcliente FROM listadodeudas WHERE 1 AND sucursal='"+str(indice)+"'"
##        resultado = consultasBD.ordenCruda(consultaSQL)
##        lista = []
##        for item in resultado:
##            lista.append(item)
##        return lista

    def consultasSQL(self,periodo,indice,campo):
        r1 = "SELECT paso3.idcliente, nombre, telefono, deuda "
        r2 = "FROM (SELECT paso2.idcliente, SUM(montocuota-montopagado) AS deuda "
        r3 = "      FROM (SELECT paso1.idcliente "
        r4 = "            FROM (SELECT idcliente,sum(montocuota) AS cuota,sum(montopagado) AS pagado "
        r5 = "                  FROM vtas_ctasctes "
        r6 = "                  WHERE 1 GROUP BY vtas_ctasctes.idcliente) as paso1 "
        r7 = "            WHERE cuota-pagado<>0) as paso2, vtas_ctasctes "
        r8 = "      WHERE paso2.idcliente = vtas_ctasctes.idcliente AND (montocuota-montopagado)<>0 AND "+periodo
        r9 = "      GROUP BY paso2.idcliente) AS paso3, cliente "
        r0 = "WHERE paso3.idcliente=cliente.idcliente ORDER BY nombre ASC"
        consultaSQL = r1 + r2 + r3 + r4 + r5 + r6 + r7 + r8 + r9 + r0
        self.resultado,self.conecta = consultasBD.ordenCrudaRemota(consultaSQL,indice)
        if self.conecta:
            for item in self.resultado:
                r1 = "listadodeudas2(sucursal,idcliente,nombre,telefono,"+campo+")"
                r2 = "('"+str(indice+1)+"','"+item[0]+"','"+item[1]+"','"+str(item[2])+"','"+str(item[3])+"')"
                consultaSQL = r1 + r2
                consultasBD.executaInsertSQL(self,r1,r2)
        else:
            texto = "Sin conexion con la sucursal\n"+self.comboBox1.GetValue()
            utiles.mensaje(None,texto)
            self.resultado = ()
        return

    def ultimoRecargo(self):
        r1 = "SELECT * FROM "
        r2 = "  (SELECT idcliente,fechaoperacion FROM vtas_ctasctes_ajustes "
        r3 = "   WHERE aprobado='1' "
        r4 = "   ORDER BY idcliente ASC, fechaoperacion DESC) AS p1 "
        r5 = "GROUP BY p1.idcliente "
        sql = r1+r2+r3+r4+r5
        resultados = consultasBD.ordenCrudaDict(sql)
        recargos = {}
        for item in resultados:
            idcliente = item["idcliente"]
            fecha = str(item["fechaoperacion"])[:10]
            recargos[idcliente] = fecha
        return recargos

    def condensando(self,indice):
        r1 = "SELECT sucursal,idcliente,nombre,telefono,deuda30,deuda60,deuda90,deudama,actual FROM listadodeudas2 "
        r2 = "WHERE sucursal = '"+str(indice+1)+"' "
        r3 = ""
        #se incluye o no quienes solo tienen deuda sin vencer?
        #tildado: True
        if not self.checkBox2.GetValue():
            r3 = "AND deuda30+deuda60+deuda90+deudama<>0 "
        r4 = "ORDER BY nombre ASC"
        consultaSQL = r1 + r2 + r3 + r4
        self.resultado = consultasBD.ordenCrudaDict(consultaSQL)
        
        print "Consolidando la informacion"
        procesados = 0
        listaRegistros = []
        for item in self.resultado:
#            if not self.existeRegistro(item['idcliente',indice+1):
            if not item['idcliente'] in listaRegistros:
                r1 = "listadodeudas(sucursal,idcliente,nombre,telefono)"
                r2 = "('"+str(item['sucursal'])+"','"+str(item['idcliente'])+"','"+str(item['nombre'])+"','"+str(item['telefono'])+"')"
                consultaSQL = r1 + r2
                consultasBD.executaInsertSQL(None,r1,r2)
                print "Procesando",item['idcliente'],item['nombre']
                listaRegistros.append(item['idcliente'])
                procesados += 1
            if item['deuda30']<>"0":
                tabla = "listadodeudas"
                campos = "deuda30='"+item['deuda30']+"'"
                condicion = "idcliente='"+item['idcliente']+"' AND sucursal='"+str(item['sucursal'])+"'"
                consultasBD.executaUpdateSQL(None,tabla,campos,condicion)
                continue
            if item['deuda60']<>"0":
                tabla = "listadodeudas"
                campos = "deuda60='"+item['deuda60']+"'"
                condicion = "idcliente='"+item['idcliente']+"' AND sucursal='"+str(item['sucursal'])+"'"
                consultasBD.executaUpdateSQL(None,tabla,campos,condicion)
                continue
            if item['deuda90']<>"0":
                tabla = "listadodeudas"
                campos = "deuda90='"+item['deuda90']+"'"
                condicion = "idcliente='"+item['idcliente']+"' AND sucursal='"+str(item['sucursal'])+"'"
                consultasBD.executaUpdateSQL(None,tabla,campos,condicion)
                continue
            if item['deudama']<>"0":
                tabla = "listadodeudas"
                campos = "deudama='"+item['deudama']+"'"
                condicion = "idcliente='"+item['idcliente']+"' AND sucursal='"+str(item['sucursal'])+"'"
                consultasBD.executaUpdateSQL(None,tabla,campos,condicion)
                continue
            if item['actual']<>"0":
                tabla = "listadodeudas"
                campos = "actual='"+item['actual']+"'"
                condicion = "idcliente='"+item['idcliente']+"' AND sucursal='"+str(item['sucursal'])+"'"
                consultasBD.executaUpdateSQL(None,tabla,campos,condicion)
                continue
        texto = "Registros procesados para sucursal "+self.comboBox1.GetValue()+": "
        print texto,procesados

    def ajustesPendientes(self):
        sql = "SELECT idcliente FROM vtas_ctasCtes_ajustes WHERE aprobado='0'"
        resultado = consultasBD.ordenCruda(sql)
        listaPendientes = []
        for item in resultado:
            listaPendientes.append(item[0])
        return listaPendientes

    def llenarGrilla(self):
        ultimoRecargo = self.ultimoRecargo()
        ajustesPendientes = self.ajustesPendientes()
        consultaSQL = "SELECT * FROM listadodeudas WHERE 1 ORDER BY nombre ASC"
        self.resultado = consultasBD.ordenCrudaDict(consultaSQL)
        
        #NroCliente,Nombre,Telefono,a30dias,a60dias,a90dias,aMasdias,TotalVencido
        #0          1      2        3       4       5       6        7
        #DeudaActual,Total,UltimoPago,UltimoRecargo,%,monto,NuevoTotal,observaciones
        #8           9     10         11           12 13    14         15
        totalDeuda30 = Decimal("0.00")
        totalDeuda60 = Decimal("0.00")
        totalDeuda90 = Decimal("0.00")
        totalDeudama = Decimal("0.00")
        totalActual = Decimal("0.00")
        totalVencido = Decimal("0.00")
        totalDeuda = Decimal("0.00")
        totalNuevo = Decimal("0.00")
        for fil,item in enumerate(self.resultado):
            self.grid1.SetCellValue(fil,0,item["idcliente"])
            self.grid1.SetReadOnly(fil,0)
            self.grid1.SetCellValue(fil,1,item["nombre"][:25])
            self.grid1.SetReadOnly(fil,1)
            self.grid1.SetCellValue(fil,2,item["telefono"][:20])
            self.grid1.SetReadOnly(fil,2)
            self.grid1.SetCellValue(fil,3,item["deuda30"])
            self.grid1.SetCellAlignment(fil,3,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,3)
            totalDeuda30+= Decimal(item["deuda30"])
            self.grid1.SetCellValue(fil,4,item["deuda60"])
            self.grid1.SetCellAlignment(fil,4,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,4)
            totalDeuda60+= Decimal(item["deuda60"])
            self.grid1.SetCellValue(fil,5,item["deuda90"])
            self.grid1.SetCellAlignment(fil,5,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,5)
            totalDeuda90+= Decimal(item["deuda90"])
            self.grid1.SetCellValue(fil,6,item["deudama"])
            self.grid1.SetCellAlignment(fil,6,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,6)
            totalDeudama+= Decimal(item["deudama"])
            total = Decimal(item["deuda30"])+Decimal(item["deuda60"])
            total+= Decimal(item["deuda90"])+Decimal(item["deudama"])
            total = total.quantize(Decimal("0.10"))
            totalVencido+= total
            self.grid1.SetCellValue(fil,7,str(total))
            totalVencido1 = total
            self.grid1.SetCellAlignment(fil,7,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,7)
            self.grid1.SetCellBackgroundColour(fil,7,GRIS)
            self.grid1.SetCellValue(fil,8,item["actual"])
            self.grid1.SetCellAlignment(fil,8,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,8)
            totalActual+= Decimal(item["actual"])
            total+= Decimal(item["actual"])
            total = total.quantize(Decimal("0.10"))
            totalDeuda+= total
            self.grid1.SetCellValue(fil,9,str(total))
            self.grid1.SetCellAlignment(fil,9,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,9)
            try:
                fecha = str(self.ultimoPago[item["idcliente"]])
                fecha = utiles.invertirFecha2(fecha)
            except:
                fecha = ""
            self.grid1.SetCellValue(fil,10,fecha)
            self.grid1.SetCellAlignment(fil,10,wx.ALIGN_CENTRE,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,10)
            fechaActual = utiles.obtenerFecha("Y-m-d")
            try:
                miRecargo = ultimoRecargo[item["idcliente"]]
                fechaRecargo = miRecargo
                miRecargo = utiles.invertirFecha2(miRecargo)

                fechaActual = utiles.strToDate(fechaActual)
                fechaRecargo = utiles.strToDate(fechaRecargo)
                try:
                    diferencia = int(((str(fechaActual-fechaRecargo)).split())[0])
                except:
                    diferencia = -1
            except:
                miRecargo = ""
                diferencia = 31
            
            self.grid1.SetCellValue(fil,11,miRecargo)
            self.grid1.SetCellAlignment(fil,11,wx.ALIGN_CENTRE,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,11)

            totalNuevo = totalDeuda
            self.grid1.SetCellValue(fil,14,str(total))
            self.grid1.SetCellAlignment(fil,14,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetReadOnly(fil,14)

            #calculo automatico recargo retrasos: 10%
            if diferencia>30 and \
               totalVencido1>0 and not (item["idcliente"] in ajustesPendientes):
                self.grid1.SetCellValue(fil,12,"10")
                self.grid1.SetCellAlignment(fil,12,wx.ALIGN_CENTRE,wx.ALIGN_CENTRE)
                self.calculaPorcentaje(fil)
##            if diferencia>60 and \
##               totalVencido1>0 and not (item["idcliente"] in ajustesPendientes):
##                self.grid1.SetCellValue(fil,12,"15")
##                self.grid1.SetCellAlignment(fil,12,wx.ALIGN_CENTRE,wx.ALIGN_CENTRE)
##                self.calculaPorcentaje(fil)

            if item["idcliente"] in ajustesPendientes:
                self.grid1.SetCellValue(fil,2,"PENDIENTE")
                self.grid1.SetCellValue(fil,15,"Ajuste pend.de Aprobacion")
                for col in xrange(self.grid1.GetNumberCols()):
                    self.grid1.SetReadOnly(fil,col)

            self.almacenamientoTemporal(fil)
            self.grid1.AppendRows()

        #NroCliente,Nombre,Telefono,a30dias,a60dias,a90dias,aMasdias,TotalVencido
        #0          1      2        3       4       5       6        7
        #DeudaActual,Total,UltimoPago,UltimoRecargo,%,monto,NuevoTotal,observaciones
        #8           9     10         11           12 13    14         15
        totalDeuda30 = totalDeuda30.quantize(Decimal("0.10"))
        totalDeuda60 = totalDeuda60.quantize(Decimal("0.10"))
        totalDeuda90 = totalDeuda90.quantize(Decimal("0.10"))
        totalDeudama = totalDeudama.quantize(Decimal("0.10"))
        totalActual = totalActual.quantize(Decimal("0.10"))
        totalVencido = totalVencido.quantize(Decimal("0.10"))
        totalDeuda = totalDeuda.quantize(Decimal("0.10"))
        totalNuevo = totalNuevo.quantize(Decimal("0.10"))
        ultimaFila = self.grid1.GetNumberRows()-1

        self.grid1.SetCellValue(ultimaFila,0,"TOTALES")
        self.grid1.SetCellAlignment(ultimaFila,0,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
        self.grid1.SetReadOnly(ultimaFila,0)
        self.grid1.SetCellValue(ultimaFila,3,str(totalDeuda30))
        self.grid1.SetCellAlignment(ultimaFila,3,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
        self.grid1.SetReadOnly(ultimaFila,3)
        self.grid1.SetCellValue(ultimaFila,4,str(totalDeuda60))
        self.grid1.SetCellAlignment(ultimaFila,4,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
        self.grid1.SetReadOnly(ultimaFila,4)
        self.grid1.SetCellValue(ultimaFila,5,str(totalDeuda90))
        self.grid1.SetCellAlignment(ultimaFila,5,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
        self.grid1.SetReadOnly(ultimaFila,5)
        self.grid1.SetCellValue(ultimaFila,6,str(totalDeudama))
        self.grid1.SetCellAlignment(ultimaFila,6,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
        self.grid1.SetReadOnly(ultimaFila,6)
        self.grid1.SetCellValue(ultimaFila,7,str(totalVencido))
        self.grid1.SetCellAlignment(ultimaFila,7,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
        self.grid1.SetReadOnly(ultimaFila,7)
        self.grid1.SetCellValue(ultimaFila,8,str(totalActual))
        self.grid1.SetCellAlignment(ultimaFila,8,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
        self.grid1.SetReadOnly(ultimaFila,8)
        self.grid1.SetCellValue(ultimaFila,9,str(totalDeuda))
        self.grid1.SetCellAlignment(ultimaFila,9,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
        self.grid1.SetReadOnly(ultimaFila,9)
        self.grid1.SetCellValue(ultimaFila,14,str(totalNuevo))
        self.grid1.SetCellAlignment(ultimaFila,14,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
        self.grid1.SetReadOnly(ultimaFila,14)
        self.almacenamientoTemporal(ultimaFila)
        self.actualizaTotales()

        self.ajustarAnchoColumnas()

        return
     
    def buscarDeudas(self):
        print
        print "SUCURSAL:",self.comboBox1.GetValue()
        indice = self.comboBox1.GetSelection()
            
        self.conecta = True
        print "-----------------------------------------------------------"
        if self.conecta: 
            print "Procesando a 30 dias >",
            self.consultasSQL(self.a30,indice,"deuda30")
        if self.conecta: 
            print "Procesando a 60 dias >",
            self.consultasSQL(self.a60,indice,"deuda60")
        if self.conecta: 
            print "Procesando a 90 dias >",
            self.consultasSQL(self.a90,indice,"deuda90")
        if self.conecta: 
            print "Procesando mas de 90 dias >",
            self.consultasSQL(self.m90,indice,"deudama")
        if self.conecta: 
            print "Procesando vencimientos futuros >",
            self.consultasSQL(self.actual,indice,"actual")
        self.ultimoPago = {}
        if self.conecta:
            print "Obteniendo indices"
            r01 = "SELECT p5.idcliente, p5.fecha "
            r02 = "FROM (SELECT p2.idcliente, fecha "
            r03 = "      FROM (SELECT p1.idcliente "
            r04 = "            FROM (SELECT idcliente, SUM( montocuota ) AS cuota, "
            r05 = "                         SUM( montopagado ) AS pagado "
            r06 = "                  FROM vtas_ctasctes "
            r07 = "                  WHERE 1 GROUP BY vtas_ctasctes.idcliente) AS p1 "
            r08 = "            WHERE cuota - pagado <>0 ) AS p2, "
            r09 = "            vtas_ctasctestienepagos AS p3, "
            r10 = "            vtas_valores AS p4 "
            r11 = "      WHERE p2.idcliente = p4.idcliente "
            r12 = "            AND p3.idrecibo = p4.idrecibo "
            r13 = "ORDER BY fecha DESC) AS p5 "
            r14 = "WHERE 1 GROUP BY p5.idcliente ORDER BY p5.idcliente "
            sql = r01+r02+r03+r04+r05+r06+r07+r08+r09+r10+r11+r12+r13+r14
            resultado,conecta = consultasBD.ordenCrudaDictRemota(sql,indice)
            if resultado==() or resultado==None or len(resultado)==0:
                resultado = ()
            for item in resultado:
                self.ultimoPago[item["idcliente"]]=str(item["fecha"])

        if not self.conecta:
            self.OnSalir(None)
            return

        self.condensando(indice)
        self.llenarGrilla()

        self.button1.Enable(True)
        self.button1.SetLabel("Guardar")
        self.button2.Enable(True)
        self.button3.Enable(True)
        self.button4.Enable(True)
        self.comboBox1.Enable(False)
        self.comboBox2.Enable(False)
        self.checkBox2.Enable(False)
        #self.datePickerCtrl1.Enable(False)

        return

    def OnLimpiar(self, event):
        if self.actualizar:
            texto = "ATENCION: \n\n"
            texto+= "Ha hecho modificaciones en la planilla.\n"
            texto+= "Si sale ahora, las perdera.\n"
            texto+= "DESEA CONTINUAR ? \n\n"
            texto+= "ACEPTAR = SI                  CANCELAR = NO"
            confirma = Dialog2.Dialog2(self, texto)
            try:
                confirma.ShowModal()
                if not confirma.getSeleccion():
                    self.button1.SetFocus()
                    return
                self.actualizar = False
            except:
                print "Error en confirmacion"
                return
        self.grid1.ClearGrid()
        for fil in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        try:
            os.remove("ClientesRecargosMasivo.txt")
        except:
            print "Archivo temporal inexistente"
        self.grid1.AppendRows()
        self.button1.Enable(True)
        self.button1.SetLabel("Aceptar")
        self.button2.Enable(True)
        self.button3.Enable(True)
        self.button4.Enable(True)
        self.comboBox1.Enable(True)
        self.comboBox2.Enable(True)
        self.comboBox2.SetSelection(-1)
        self.checkBox2.Enable(True)
        self.datePickerCtrl1.Enable(True)
        self.datePickerCtrl1.SetFocus()

    def actualizaTotales(self):
        totalMonto = Decimal("0.00")
        totalNuevo = Decimal("0.00")
        for fil in xrange(self.grid1.GetNumberRows()-1):
            try:
                totalNuevo+= Decimal(self.grid1.GetCellValue(fil,14)).quantize(Decimal("0.10"))
            except:
                totalNuevo+= Decimal("0.00")
            if self.grid1.GetCellValue(fil,13)=="":
                continue
            totalMonto+= Decimal(self.grid1.GetCellValue(fil,13)).quantize(Decimal("0.10"))
        ultimaFila = fil+1
        self.grid1.SetCellValue(ultimaFila,13,str(totalMonto))
        self.grid1.SetCellAlignment(ultimaFila,13,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
        self.grid1.SetReadOnly(ultimaFila,13)
        self.grid1.SetCellValue(ultimaFila,14,str(totalNuevo))
        self.grid1.SetCellAlignment(ultimaFila,14,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
        self.grid1.SetReadOnly(ultimaFila,14)
        self.almacenamientoTemporal(ultimaFila)

    def calculaPorcentaje(self,fila):
        #NroCliente,Nombre,Telefono,a30dias,a60dias,a90dias,aMasdias,TotalVencido
        #0          1      2        3       4       5       6        7
        #DeudaActual,Total,UltimoPago,UltimoRecargo,%,monto,NuevoTotal,observaciones
        #8           9     10         11           12 13    14         15
        celda = self.grid1.GetCellValue(fila, 12)
        try:
            porcentaje = Decimal(celda).quantize(Decimal("0.10"))
        except:
            self.grid1.SetCellValue(fila,12,"")
            self.grid1.SetCellValue(fila,13,"")
            self.grid1.SetCellValue(fila,14,self.grid1.GetCellValue(fila,9))
            return
        if porcentaje == Decimal("0.00"):
            self.grid1.SetCellValue(fila,12,"")
            self.grid1.SetCellValue(fila,13,"")
            self.grid1.SetCellValue(fila,14,self.grid1.GetCellValue(fila,9))
            return
        totalVencido = Decimal(self.grid1.GetCellValue(fila,7))
        recargo = totalVencido * porcentaje / Decimal("100.00")
        recargo = recargo.quantize(Decimal("0.10"))
        nuevaDeuda = Decimal(self.grid1.GetCellValue(fila,9)).quantize(Decimal("0.10"))+recargo
        self.grid1.SetCellValue(fila,13,str(recargo))
        self.grid1.SetCellAlignment(fila,13,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
        self.grid1.SetCellValue(fila,14,str(nuevaDeuda))
        self.grid1.SetCellAlignment(fila,14,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
        return

    def OnGrid1GridCellChange(self, event):
        fila = self.grid1.GetGridCursorRow()
        columna = self.grid1.GetGridCursorCol()
        celda = self.grid1.GetCellValue(fila, columna)
        if self.grid1.GetCellValue(fila,0)=="" or \
           self.grid1.GetCellValue(fila,7)=="" or \
           self.grid1.GetCellValue(fila,9)=="":
            for col in xrange(self.grid1.GetNumberCols()):
                self.grid1.SetCellValue(fila,col,"")
            self.almacenamientoTemporal(fila)
            return
        self.actualizar = True

        #NroCliente,Nombre,Telefono,a30dias,a60dias,a90dias,aMasdias,TotalVencido
        #0          1      2        3       4       5       6        7
        #DeudaActual,Total,UltimoPago,UltimoRecargo,%,monto,NuevoTotal,observaciones
        #8           9     10         11           12 13    14         15
        if columna == 12: # %
            try:
                porcentaje = Decimal(celda).quantize(Decimal("0.10"))
            except:
                self.grid1.SetCellValue(fila,12,"")
                self.grid1.SetCellValue(fila,13,"")
                self.grid1.SetCellValue(fila,14,self.grid1.GetCellValue(fila,9))
                self.actualizaTotales()
                self.almacenamientoTemporal(fila)
                return
            if porcentaje == Decimal("0.00"):
                self.grid1.SetCellValue(fila,12,"")
                self.grid1.SetCellValue(fila,13,"")
                self.grid1.SetCellValue(fila,14,self.grid1.GetCellValue(fila,9))
                self.actualizaTotales()
                self.almacenamientoTemporal(fila)
                return
            totalVencido = Decimal(self.grid1.GetCellValue(fila,7))
            recargo = totalVencido * porcentaje / Decimal("100.00")
            recargo = recargo.quantize(Decimal("0.10"))
            nuevaDeuda = Decimal(self.grid1.GetCellValue(fila,9)).quantize(Decimal("0.10"))+recargo
            self.grid1.SetCellValue(fila,13,str(recargo))
            self.grid1.SetCellAlignment(fila,13,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetCellValue(fila,14,str(nuevaDeuda))
            self.grid1.SetCellAlignment(fila,14,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.actualizaTotales()
            self.almacenamientoTemporal(fila)
            return
        
        #NroCliente,Nombre,Telefono,a30dias,a60dias,a90dias,aMasdias,TotalVencido
        #0          1      2        3       4       5       6        7
        #DeudaActual,Total,UltimoPago,UltimoRecargo,%,monto,NuevoTotal,observaciones
        #8           9     10         11           12 13    14         15
        if columna == 13: # monto
            try:
                monto = Decimal(celda).quantize(Decimal("0.10"))
            except:
                self.grid1.SetCellValue(fila,12,"")
                self.grid1.SetCellValue(fila,13,"")
                self.grid1.SetCellValue(fila,14,self.grid1.GetCellValue(fila,9))
                self.actualizaTotales()
                self.almacenamientoTemporal(fila)
                return
            if monto == Decimal("0.00"):
                self.grid1.SetCellValue(fila,12,"")
                self.grid1.SetCellValue(fila,13,"")
                self.grid1.SetCellValue(fila,14,self.grid1.GetCellValue(fila,9))
                self.actualizaTotales()
                self.almacenamientoTemporal(fila)
                return
            recargo = monto
            nuevaDeuda = Decimal(self.grid1.GetCellValue(fila,9)).quantize(Decimal("0.10"))+recargo
            self.grid1.SetCellValue(fila,12,"")
            self.grid1.SetCellValue(fila,13,str(recargo))
            self.grid1.SetCellAlignment(fila,13,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.grid1.SetCellValue(fila,14,str(nuevaDeuda))
            self.grid1.SetCellAlignment(fila,14,wx.ALIGN_RIGHT,wx.ALIGN_CENTRE)
            self.actualizaTotales()
            self.almacenamientoTemporal(fila)
            return

        #NroCliente,Nombre,Telefono,a30dias,a60dias,a90dias,aMasdias,TotalVencido
        #0          1      2        3       4       5       6        7
        #DeudaActual,Total,UltimoPago,UltimoRecargo,%,monto,NuevoTotal,observaciones
        #8           9     10         11           12 13    14         15
        if celda == "r" or celda == "R":
            self.grid1.SetCellValue(fila,columna,"recargo")
            self.almacenamientoTemporal(fila)
            return
        if celda == "m" or celda == "M":
            self.grid1.SetCellValue(fila,columna,"recargo por mora")
            self.almacenamientoTemporal(fila)
            return
        if celda == "d" or celda == "D":
            self.grid1.SetCellValue(fila,columna,"descuento")
            self.almacenamientoTemporal(fila)
            return
        if celda == "i" or celda == "I":
            self.grid1.SetCellValue(fila,columna,"impago")
            self.almacenamientoTemporal(fila)
            return
        if celda == "e" or celda == "E":
            self.grid1.SetCellValue(fila,columna,"error en cta. cte")
            self.almacenamientoTemporal(fila)
            return
        if celda == "p" or celda == "P":
            self.grid1.SetCellValue(fila,columna,"poner en cero")
            self.almacenamientoTemporal(fila)
            return

    def OnAjustar(self, event):
        self.ajustarAnchoColumnas()

    def guardarRecargos(self):
        print "Grabando recargos"
        sucursal = str(self.comboBox1.GetSelection())
        usuario = self.comboBox2.GetLabel()
        fecha = utiles.obtenerFecha("Y-m-d h:m:s")

        for fila in xrange(self.grid1.GetNumberRows()):
            if self.grid1.GetCellValue(fila,0) == "" or \
               self.grid1.GetCellValue(fila,0) == "TOTALES":
                continue
            if self.grid1.GetCellValue(fila,12) == "" and \
               self.grid1.GetCellValue(fila,13) == "":
                continue
            if self.grid1.GetCellValue(fila,15)=="":
                utiles.mensaje(None,"Falta introducir descripcion\nFila: "+str(fila+1))
                return
        total = 0
        for fila in xrange(self.grid1.GetNumberRows()):
        #NroCliente,Nombre,Telefono,a30dias,a60dias,a90dias,aMasdias,TotalVencido
        #0          1      2        3       4       5       6        7
        #DeudaActual,Total,UltimoPago,UltimoRecargo,%,monto,NuevoTotal,observaciones
        #8           9     10         11           12 13    14         15
            if self.grid1.GetCellValue(fila,0) == "" or \
               self.grid1.GetCellValue(fila,0) == "TOTALES":
                continue
            if self.grid1.GetCellValue(fila,12) == "" and \
               self.grid1.GetCellValue(fila,13) == "":
                continue
            idcliente = self.grid1.GetCellValue(fila,0)
            nombre = self.grid1.GetCellValue(fila,1)
            if Decimal(self.grid1.GetCellValue(fila,13))>0:
                tipooperacion = "RECA"
            else:
                tipooperacion = "DESC"
            fechaoperacion = utiles.invertirFecha(self.datePickerCtrl1.GetLabel())
            descripcion = self.grid1.GetCellValue(fila,15)
            if self.grid1.GetCellValue(fila,11)=="":
                deudaVencida = Decimal(self.grid1.GetCellValue(fila,7)).quantize(Decimal("0.10"))
                monto = Decimal(self.grid1.GetCellValue(fila,13)).quantize(Decimal("0.10"))
                try:
                    porcentaje = (monto / deudaVencida * Decimal("100")).quantize(Decimal("0.10"))
                except:
                    porcentaje = Decimal("0.00")
                porcentaje = str(porcentaje)
            else:
                porcentaje = self.grid1.GetCellValue(fila,12)
            valor = self.grid1.GetCellValue(fila,13)
            viejadeuda = self.grid1.GetCellValue(fila,9)
            nuevadeuda = self.grid1.GetCellValue(fila,14)

            r1 = "vtas_ctasctes_ajustes(sucursal,usuario,fecha,idcliente,"
            r2 = "nombre,tipooperacion,fechaoperacion,descripcion,porcentaje,"
            r3 = "valor,viejadeuda,nuevadeuda,aprobado)"
            sql1 = r1+r2+r3
            r1 = "('"+sucursal+"','"+usuario+"','"+fecha+"','"+idcliente
            r2 = "','"+nombre+"','"+tipooperacion+"','"+fechaoperacion
            r3 = "','"+descripcion+"','"+porcentaje+"','"+valor
            r4 = "','"+viejadeuda+"','"+nuevadeuda+"','0')"
            sql2 = r1+r2+r3+r4
            consultasBD.executaInsertSQL(None,sql1,sql2)
            total+=1
        
        utiles.mensaje(None,"Se procesaron "+str(total)+" clientes")
        self.actualizar = False
        self.OnLimpiar(None)

    def OnGrid1DobleClick(self, event):
        fil = self.grid1.GetGridCursorRow()
        col = self.grid1.GetGridCursorCol()
        #NroCliente,Nombre,Telefono,a30dias,a60dias,a90dias,aMasdias,TotalVencido
        #0          1      2        3       4       5       6        7
        #DeudaActual,Total,UltimoPago,%,monto,NuevoTotal,observaciones
        #8           9     10        11 12    13         14
        idcliente = self.grid1.GetCellValue(fil,0)
        r1 = "SELECT fechaaprobado,valor "
        r2 = "FROM vtas_ctasctes_ajustes "
        r3 = "WHERE idcliente='"+idcliente+"' AND aprobado='1'"
        r4 = "ORDER BY fechaaprobado DESC LIMIT 1 "
        sql = r1+r2+r3+r4
        resultados = consultasBD.ordenCruda(sql)
        if resultados==() or resultados==None or len(resultados)==0:
            utiles.mensaje(None,"No se encontro informacion\nde ultimo recargo/descuento")
            return
        fecha,valor = resultados[0][0],resultados[0][1]
        fecha = utiles.invertirFecha2(str(fecha))
        valor = str(valor)
        texto = "Ultimo fecha de recargo/descuento: "+fecha+"\n"
        texto+= "Monto recargo/descuento aplicado: $"+valor
        utiles.mensaje(None,texto)

    def OnBorrarRecargos(self, event):
        #NroCliente,Nombre,Telefono,a30dias,a60dias,a90dias,aMasdias,TotalVencido
        #0          1      2        3       4       5       6        7
        #DeudaActual,Total,UltimoPago,UltimoRecargo,%,monto,NuevoTotal,observaciones
        #8           9     10         11           12 13    14         15
        for fil in xrange(self.grid1.GetNumberRows()):
            if self.grid1.GetCellValue(fil,0)=="":
                continue
            self.grid1.SetCellValue(fil,12,"")
            self.grid1.SetCellValue(fil,13,"")
            self.grid1.SetCellValue(fil,14,self.grid1.GetCellValue(fil,9))
            
        self.actualizaTotales()
          
            
